#include <QtGui>
#include "FindDialog.h"

FindDialog::FindDialog(QWidget *parent) : QDialog(parent)
{
	label = new QLabel(tr("Find &what:"));
	lineEdit = new QLineEdit;
	label->setBuddy(lineEdit);

	caseCheckBox = new QCheckBox(tr("March &case"));
	backwardCheckBox = new QCheckBox(tr("Search &backward"));

	findButton = new QPushButton(tr("&Find"));
	findButton->setDefault(true);
	findButton->setEnabled(false);

	closeButton = new QPushButton(tr("Close"));

	connect(lineEdit, SIGNAL(textChanged(const QString &)),
		this, SLOT(enableFindButton(const QString &)));
	connect(findButton, SIGNAL(clicked()),
		this, SLOT(findClicked()));
	connect(closeButton, SIGNAL(clicked()),
		this, SLOT(close()));

	connect(this, SIGNAL(findNext(const QString &, Qt::CaseSensitivity)),
		this, SLOT(showFindCondition(Qt::CaseSensitivity, false)));

	QHBoxLayout *topLeftLayout = new QHBoxLayout();
	topLeftLayout->addWidget(label);
	topLeftLayout->addWidget(lineEdit);

	QVBoxLayout *leftLayout = new QVBoxLayout();
	leftLayout->addLayout(topLeftLayout);
	leftLayout->addWidget(caseCheckBox);
	leftLayout->addWidget(backwardCheckBox);

	QVBoxLayout *rightLayout = new QVBoxLayout();
	rightLayout->addWidget(findButton);
	rightLayout->addWidget(closeButton);
	rightLayout->addStretch();

	QHBoxLayout *mainLayout = new QHBoxLayout();
	mainLayout->addLayout(leftLayout);
	mainLayout->addLayout(rightLayout);
	setLayout(mainLayout);

	setWindowTitle(tr("Find"));
	setFixedHeight(sizeHint().height());
}

FindDialog::~FindDialog()
{
}

void FindDialog::findClicked()
{
	QString text = lineEdit->text();
	Qt::CaseSensitivity cs = caseCheckBox->isChecked()
		? Qt::CaseSensitive : Qt::CaseInsensitive;
	if(backwardCheckBox->isChecked()) {
		emit findNext(text, cs);
	} else {
		emit findPrevious(text, cs);
	}
}

void FindDialog::enableFindButton(const QString &str)
{
	findButton->setEnabled(!str.isEmpty());
}

void FindDialog::showFindCondition(Qt::CaseSensitivity cs, bool isBackward)
{
	QString condition;

	if(Qt::CaseSensitive == cs) {
		condition = QObject::tr("Case Sensitive");
	} else {
		condition = QObject::tr("Case Insensitive");
	}

	if(isBackward) {
		condition += QObject::tr("& Backward");
	} else {
		condition += QObject::tr("& Forward");
	}

	lineEdit->setText(condition);
}

//void FindDialog::findNext(const QString &str, Qt::CaseSensitivity cs)
//{
//	showFindCondition(cs, backwardCheckBox->isChecked());
//}
//void FindDialog::findPrevious(const QString &str, Qt::CaseSensitivity cs)
//{
//	showFindCondition(cs, backwardCheckBox->isChecked());
//}
